<?php

include_once '../Utility/BaseGeocode.php';
include_once '../Utility/GoogleGeocode.php';
include_once '../InfoManager/Constants.php';
include_once '../Model/GPS.php';
include_once '../AtacCommunicator/Retriever.php';
include_once '../Utility/simplehtmldom/simple_html_dom.php';

class Location extends Retriever{
	
	private $address;
	private $busStop;
	private $GPS;
	private $apiKey="ABQIAAAAaGaDFQHLQXnmuEDzS3fqdhT15ggTo4VlgQ_ZLpMq03KLTQ4lgRR6aYiUtGCU4H715mk7B_bJWyCTNg";//apiKey server PanizziSapienza
	/**
	 * Location va istanziata con un solo parametro, gli altri due saranno a null di default
	 * Il costruttore si occupa di fare le trasformazioni per i parametri mancanti
	 * 
	 * @param Address $address
	 * @param Stop $stop
	 * @param GPS $GPS
	 * @return Location
	 */
	 
	 
	function __construct($address=null, $busStop=null, $GPS=null) {
		$this->address = $address;
		$this->busStop = $busStop;
		$this->GPS = $GPS;
		
		if (($GPS==null) && ($busStop==null))
		{
			$this->GPS = $this->addressToGPS($this->address); //ottengo le coordinate GPS per una via
		}
		else
			if (($GPS==null) && ($address==null))
			{
				$this->GPS = $this->busStopToGPS($this->address);
			}
			else
				if (($address==null) && ($busStop==null))
				{
					$this->address = $this->GPSToAddress($GPS);
				}		
	}
	
	
	 function GPSToAddress($GPS) {

		//Effettua la trasformazione da GPS a indirizzo
		$url= "http://maps.google.com/maps/geo?q=".$GPS->getLat().",".$GPS->getLon()."&output=kml";
		
		$pageContent = $this->getHTMLPageFromURL($url); //si trova nella classe Retriever.php			
		if ($pageContent==false)
		{
			return null;
		}	
		$html = str_get_html($pageContent); //prendo il codice html della pagina
		$text = $html->plaintext; //prendo la pagina in formato testo
		//comincio a cercare i tag giusti per determinare il percorso
		$ret0 = $html->find('address');//trovo il tag <address>
		//formatto l'indirizzo da restituire
		$indirizzo = explode("<address>",$ret0[0]->plaintext);
        $parts = explode(",",$indirizzo[0]);
		
		//$indirizzo = explode("<address>",$ret0[0]);
		//$parts = explode(",",$indirizzo[1]);
		if (count($parts)>2){		
			if($parts[2]!=null){//se il numero civico esiste, lo inserico nell'indirizzo da restituire
				$civico = explode("-",$parts[1]);//se c' un intervallo di numeri civici, inserico il primo
				$address = $parts[0].$civico[0];
			}
		}else
			$address = $parts[0];
		$address=str_replace("&#39;", "'", $address);
		return $address;
	}

	
	private function busStopToGPS($busStop) {
		//Effettua la trasformazione da fermata a gps
		
		
		//Rende il risultato
		return $GPS;
	}
	
	
	
	private function addressToGPS($address) {
	
		$geo = new GoogleGeocode($this->apiKey);
		$stringa = utf8_encode($address.", Roma, Italia");
		$coord = $geo->geocode($stringa);

		$latVal = $coord['Placemarks'][0]['Latitude'];
		$longVal = $coord['Placemarks'][0]['Longitude'];

		$GPS = new GPS($latVal,$longVal);//GPS dell'indirizzo di partenza

		//Rende il risultato
		return $GPS;
	}
	
	public function getAddress() {
		return $this->address;
	}
	
	public function getGPS() {
		return $this->GPS;
	}
	
	
	
}


?>